package DataStructure.ArrayLearning.Iterator;

public interface MyIterator<E> {
    /**
     * 将指定元素插入的迭代器所在的位置
     *
     * @param e 指定的元素
     */
    void add(E e);

    /**
     * 向后是否有下一个待迭代的元素
     *
     * @return 有，返回 true
     */
    boolean hasNext();

    /**
     * 返回向后的下一个待迭代元素的下标
     *
     * @return 下标，在列表尾则返回列表大小
     */
    int nextIndex();

    /**
     * 返回向后的下一个待迭代元素
     *
     * @return 返回的元素
     */
    E next();

    /**
     * 向前是否有下一个待迭代的元素
     *
     * @return 有，返回 true
     */
    boolean hasPrevious();

    /**
     * 返回向前的下一个待迭代元素的下标
     *
     * @return 下标，在列表尾则返回列表大小
     */
    int previousIndex();

    /**
     * 返回向前的下一个待迭代元素
     *
     * @return 返回的元素
     */
    E previous();

    /**
     * 在列表中删除上一个被迭代的元素
     */
    void remove();

    /**
     * 用指定元素替换上一个被迭代的元素
     */
    void set(E e);
}
